Introdução


A partir do arquivo do kaggle (https://www.kaggle.com/christianlillelund/csgo-round-winner-classification) publicado pelo usuário Christian Lillelund, o objetivo é conseguir classficiar o final de um round ou seja o vencedor dela, a partir das variaveis dispostas em um determinado momento do jogo.

Sobre o jogo CS GO é um jogo de tiro em primeira pessoa que os jogadores são separados em dois grupos, os Terroristas e os Contra Terroristas. O objetivo dos terroristas é implantar a bomba e detoná-las antes que o round de dois minutos acabe. Os contra-terroristas tem que impedir que isso aconteça. A partida tem trinta rounds e o aquele que tiver a maioria, ou seja, aquele que conseguir vencer primeiro 16 rounds vence.

Nos arquivos importados acima fizemos a separação das armas em grupos, em vez de termos uma coluna por arma, o que deixaria o nosso modelo muito complexo desnecessariamente.

Aqui acima é possível notar o data set puro tem uma quantidade enorme de colunas 97, sendo que a grande maioria não é de grande importância para o modelo. Por isso posteriormente iremos selecionar melhor elas.

Entre as colunas, existe a coluna específica de cada arma que pode ser utilizada no jogo, assim como a granada escolhida, sendo o seu valor vai de 0 a 5 (depende de quantas estão sendo utilizadas pela equipe). Para o nosso projeto agrupou-se as armas em categorias de armas: “sec” rifles, main rifles, normal force weapons, weak pistol e extra strong pistols. Isso foi feito na função Parser().

Além disso, criamos a categoria “eco". No jogo, as armas são compradas com o dinheiro do jogo ganho a cada round. Em alguns casos, os jogadores como equipe optam por economizar em um round para investir o dinheiro no próximo round, ou seja, não compram nenhuma arma no round. Essa categoria foi criada pois a tendência é quando o grupo escolhe o eco round normalmente perde e pode ser um bom feature para o modelo.

A categoria “pistol round” foi criada pois o primeiro round do jogo e o round 16, de troca de lado, acontecem de pistola. Por serem rounds iniciais (primeiro round do jogo e o round em que os jogadores estão jogando pela primeira vez por uma outra classe) não tem dinheiro o suficiente para comprar armas e o jogo acontece com pistolas.

Já a categoria “force” acontece quando os jogadores têm pouco dinheiro e mesmo se tentassem jogar um eco round (economizando para o próximo) não teriam o suficiente para comprar armas boas no próximo round. Eles então são forçados a comprar armas mais baratas e piores, e tentam ganhar o jogo dessa maneira. Sendo isso, seria importante identificar essa categoria, visto que pode ser um grande indicativo de derrota.

Aqui selecionamos as colunas do dataset que julgamos ter mais relevancia para o modelo, além de algumas que filtramos após analisar a feature importance do modelo selecionado. Além disso tiramos as colunas que tinhamos resumido posteriormente, restando apenas 36 colunas

Aqui udamos a variavel dependente de uma string "CT" ou "T" para uma binária (1 ou 0).

Separando variável dependente

Selecionando variáveis categóricas e passando elas para type category

Selecionando variáveis numéricas e passando o data set pela pipline.

Separando dados entre treinamento e teste (tamanho do conjunto teste de 33,3% do total)

Fizemos assim a comparação entre três modelos diferentes de classificador, para determinar qual é o melhor para o nosso conjunto de dados. Sendo que todos foram testados com cross validation(cv = 3).

Random Forest Classifier

SGD Classifier

Naive Bayes

Com todos os modelos rodados agora fizemos a comparação entre os três por meio dos parametros accuracy,precision e recall.

Escolha do melhor modelo

Accuracy, Precision e Recall dos modelos testados

Antes de entrar em detalhes sobre a performance dos modelos, é importante esclarecer algumas métricas dentro do contexto dos nossos dados:

Nesse sentido, as seguintes métricas de Accuracy, Precision e Recall foram calculadas seguindo as fórmulas:

Comparação entre os três modelos com a Accuracy

Comparação entre os três modelos com a Precision

Comparação entre os três modelos com o Recall

Resultados dos Modelos

De acordo com os gráficos acima, é evidente que o Random Forest Classifier possui desempenho superior à todos os seus concorrentes quando se trata de precision, recall e accuracy. Nesse sentido, os próximos passos do modelo procuram entender como otimizar os parâmetros do Random Forest Classifier de forma à alcançar resultados ainda melhores.

Feature Importances

Com o melhor modelo escolhido decidimos fazer uma análise das variáveis com mais e menos importância para o modelo

Variáveis mais importantes

Variáveis menos importantes

A medida de score definida para o modelo foi a "roc_auc", que mede a capacidade do modelo de distinguir as classes (round winner). Quanto maior o AUC, melhor a capacidade do modelo de prever outputs positivos e negativos, ou seja, melhor a capacidade do modelo de distinguir se uma determinada equipe vai vencer aquela rodada ou não.

De acordo com o gráfico acima, após o treinamento do modelo utilizando diversos parâmetros de n_estimators e max_features, é possível chegar em duas conclusões:

Nesse sentido, ainda é possível continuar otimizando os parâmetros do modelo ao testar novos valores para estas variáveis.